home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / bsddb / dbutils.pyc (.txt) < prev   
Python Compiled Bytecode  |  2008-10-29  |  2KB  |  53 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. from time import sleep as _sleep
  5. import db
  6. _deadlock_MinSleepTime = 1 / 128
  7. _deadlock_MaxSleepTime = 3.14159
  8. _deadlock_VerboseFile = None
  9.  
  10. def DeadlockWrap(function, *_args, **_kwargs):
  11.     '''DeadlockWrap(function, *_args, **_kwargs) - automatically retries
  12.     function in case of a database deadlock.
  13.  
  14.     This is a function intended to be used to wrap database calls such
  15.     that they perform retrys with exponentially backing off sleeps in
  16.     between when a DBLockDeadlockError exception is raised.
  17.  
  18.     A \'max_retries\' parameter may optionally be passed to prevent it
  19.     from retrying forever (in which case the exception will be reraised).
  20.  
  21.         d = DB(...)
  22.         d.open(...)
  23.         DeadlockWrap(d.put, "foo", data="bar")  # set key "foo" to "bar"
  24.     '''
  25.     sleeptime = _deadlock_MinSleepTime
  26.     max_retries = _kwargs.get('max_retries', -1)
  27.     if _kwargs.has_key('max_retries'):
  28.         del _kwargs['max_retries']
  29.     
  30.     while True:
  31.         
  32.         try:
  33.             return function(*_args, **_kwargs)
  34.         continue
  35.         except db.DBLockDeadlockError:
  36.             if _deadlock_VerboseFile:
  37.                 _deadlock_VerboseFile.write('dbutils.DeadlockWrap: sleeping %1.3f\n' % sleeptime)
  38.             
  39.             _sleep(sleeptime)
  40.             sleeptime *= 2
  41.             if sleeptime > _deadlock_MaxSleepTime:
  42.                 sleeptime = _deadlock_MaxSleepTime
  43.             
  44.             max_retries -= 1
  45.             if max_retries == -1:
  46.                 raise 
  47.             
  48.             max_retries == -1
  49.         
  50.  
  51.         None<EXCEPTION MATCH>db.DBLockDeadlockError
  52.  
  53.